package com.achobeta.recruitment.service.interact;

import com.achobeta.recruitment.model.Message;
import com.achobeta.recruitment.model.Student;
import com.achobeta.recruitment.model.vo.MessageVO;
import org.apache.ibatis.annotations.Param;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 马拉圈
 * Date: 2023-10-31
 * Time: 17:56
 */
public interface MessageService {


    /**
     * 保存文件
     * @param file
     * @param path
     */
    void loadImage(MultipartFile file, String path);


    /**
     * 公众号发送模板消息
     * @param message
     * @return
     */
    String sendModelMessage(Message message);

    /**
     * 发送普通模板消息
     * @param message
     */
    @Transactional// 模板消息发出和插入是一体的
    void sendMessageNormal(Message message);

    /**
     * 发送可反馈的模板消息
     * @param message
     */
    @Transactional// 模板消息发出和插入是一体的
    void sendMessageLimit(Message message);

    /**
     * 发送指定跳转的模板消息
     * @param message
     */
    @Transactional// 模板消息发出和插入是一体的
    void sendMessageURL(Message message);

    /**
     * 发送携带图片的模板消息
     * @param message
     */
    @Transactional// 模板消息发出和插入是一体的
    void sendMessageWithPhoto(Message message);


    /**
     * 更新消息的状态 => 2 、 3
     * @param messageId
     * @param state
     */
    void updateState(Integer messageId, Byte state);

    /**
     * 通过id查询message
     * @param messageId
     * @return
     */
    Message selectMessageById(Integer messageId);

    /**
     * 根据三个id多表查询出消息的详情
     * @param messageId
     * @param openid
     * @return
     */
    MessageVO getDetail(Integer messageId, String openid);

    /**
     *  群发普通消息
     * @param students
     * @param message
     */
    @Transactional
    void sendMessageNormal(List<Student> students, Message message);

    @Transactional
    void sendMessageLimit(List<Student> students, Message message);

    @Transactional
    void sendMessageURL(List<Student> students, Message message);

    @Transactional
    void sendMessageWithPhoto(List<Student> students, Message message);


    /**
     * 通过openid查询消息消息（多表连接）
     * @param openid
     * @return
     */
    List<MessageVO> selectMessageByOpenId(String openid);
}
